From fd9df1864b2ad52363e62bd54ea6a3dbb8e9ebfd Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 1 Nov 2011 08:49:04 -0400 Subject: [PATCH] Brute-force dynamic change propagation We need to make sure that we connect to ::items-changed on every single model, as they appear and disappear. Ugly business. --- tests/testgmenu.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/tests/testgmenu.c b/tests/testgmenu.c index 566ae7ce94..c04e166659 100644 --- a/tests/testgmenu.c +++ b/tests/testgmenu.c @@ -726,17 +726,6 @@ button_clicked (GtkButton *button, gpointer data) gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, 0); } -static void -items_changed (GMenuModel *model, - gint position, - gint removed, - gint added, - GtkButton *button) -{ - g_print ("Received GMenuModel::items-changed\n"); - g_object_set_data (G_OBJECT (button), "menu", NULL); -} - static void action_added (GActionGroup *group, const gchar *name, @@ -762,7 +751,11 @@ recursively_connect_to_items_changed (GMenuModel *model, GMenuModel *m; GMenuLinkIter *iter; - g_signal_connect (model, "items-changed", callback, data); + if (!g_object_get_data (G_OBJECT (model), "handler-connected")) + { + g_signal_connect (model, "items-changed", callback, data); + g_object_set_data (G_OBJECT (model), "handler-connected", GINT_TO_POINTER (1)); + } for (i = 0; i < g_menu_model_get_n_items (model); i++) { iter = g_menu_model_iterate_item_links (model, i); @@ -776,6 +769,18 @@ recursively_connect_to_items_changed (GMenuModel *model, } } +static void +items_changed (GMenuModel *model, + gint position, + gint removed, + gint added, + GtkButton *button) +{ + g_print ("Received GMenuModel::items-changed\n"); + g_object_set_data (G_OBJECT (button), "menu", NULL); + recursively_connect_to_items_changed (model, G_CALLBACK (items_changed), button); +} + static GtkWidget * create_menu_button (GMenuModel *model, GActionGroup *group) { -- 2.30.2